<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>

  // 函数的概念?
  // 函数就是把完成特定功能的一段代码抽象出来，使之成为程序中的一个独立实体，起个名字（函数名）。可以在同一个程序或其他程序中多次重复使用（通过函数名调用）。

  // 基本语法:
  // function 函数名(参数1,参数2){
  //     完成特定功能的代码;  // 加法  闰年 素数判断  打印三角形
  //     return 返回值; // 函数执行的结果 (可以认为控制方法执行之后 返回的结果)
  // }

  // 如何封装函数?
  // 1. 写特定功能的代码 => 在函数封装之前,必须先将基本功能写出来
  // 2. 把完成特定功能的代码抽离出来, 放到函数中,起一个函数名
  // 3. 确定函数的返回值 => 函数执行完毕之后输出的结果(用户可以按照需求自定义)
  // 4. 调用函数  => 函数名()  

  // 关于函数调用
  //    a. 函数在没有调用之前,都是以文本的形式 存储在内存中的,调用时才会执行
  //    b. 每次调用函数,都会执行函数的上下文 => 从函数中的第一行执行到最后一行
  //    c. 函数遇到return 就会停止 (位于return之后的语句不执行),并返回 return 的结果

  // 关于函数的返回值
  //    1. 返回值可以有,也可以不设置(如果不设置 默认返回undefined    return undefined)
  //    2. 位于return之后的语句不执行

  //    3. 如果函数在再执行的过程中直接将结果输出到页面 (可以直接看到效果),不设置返回值也是可以的 (默认返回undefined)
  //       如果函数需要返回一个 结果  =>此时需要设置return值


  // 封装一个函数 可以计算任意两个数的和?

  //  1. 写特定功能的代码 => 在函数封装之前,必须先将基本功能写出来
  // var a = 1;
  // var b = 2;
  // var c = a + b;

  // 2. 把完成特定功能的代码抽离出来, 放到函数中,起一个函数名

  // debugger;

  function add() {
    // debugger;  //  如果想让代码执行到函数中停止  => 在函数中大断点
    var a = 1;
    var b = 2;
    var c = a + b;

    // document.write(c); // 直接输出到页面  

    // return c;    // 3. 确定函数的返回值 => 函数执行完毕之后输出的结果
    // return 3; //变量c存储的结果

    // return "100";
  }


  // var result = add;  // 函数名(其实也是一个变量名)    a. 函数在没有调用之前,都是以文本的形式 存储在内存中的,调用时才会执行
  // console.log(result); 

  // 4. 调用函数  
  var result = add();   //调用函数add 将函数的执行结果赋值给变量result
  console.log(result);

  var result = add();   //调用函数add 将函数的执行结果赋值给变量result
  console.log(result);

  var result = add();   //调用函数add 将函数的执行结果赋值给变量result
  console.log(result);
</script>

</html>